<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // Math 语法

        // Math内置
        console.log(Math);
        // 随机0到1之间所有的数
        console.log(Math.random());
        // 括号后面跟*几 就是在0到几之间随机
        console.log(Math.random() * 5);
        // 向上取整 小数进一
        console.log(Math.ceil(5.5));
        // 向下取整 去掉小数
        console.log(Math.floor(5.5));
        // 四舍五入
        console.log(Math.round(3.1));
        console.log(Math.round(3.6));
        // 取两个数的最大最小值
        Math.min(x, y)//最小
        Math.max(x, y)//最大
        // 算 N 到 M 的整数
        console.log(Math.floor * (N - M + 1) + N);




        // 比较运算符
        //  == 双等号   只判断数值是否相等 相等true 不等false
        console.log(3 == '3');
        // === 全等   先判断数值类型是否一样,再判断数值是否相等 有一样不同即为fales
        console.log(3 === '3');
        // !== 是否不相等
        console.log(3 !== '4')
        // 字符串判断   每个字符也有定义的默认大小,但是不重要
        console.log('a' < 'c');
        // isNaN  ()      判断是否不是数字 不是数字为true
        console.log(isNaN('a'));




        // 逻辑运算符
        // 与 &&    都真才真
        // 表示元素要同时为 true 结果才为 true ,有任何一个为false 结果都为false    
        console.log(3 > 1 && 5 > 2);//true
        console.log(3 < 1 && 5 > 2);//false

        // 或 ||    一真则真
        // 表示元素任意一个为 true 结果就为 true ,都为fales,结果为fales
        console.log(3 < 1 || 5 > 2);//true
        console.log(3 < 1 || 5 < 2);//false

        //非 !      
        // 表示相反的判断
        console.log(!(3 < 1));//true
        console.log(!(3 > 1));//false




        // 短路
        // 条件不赋值 算false
        // 在 && 中,只要左边为false,则后边的程序不执行,直接判断为false    反之则输出最后的程序结果    
        // 在 || 中,只要左边为true,则后边的程序不执行,直接判断为true      反之则输出最后的程序结果
        function zxc(x, y) {
            x = x || 6
            y = y || 3
            console.log(x + y);
        }
        zxc()





        // if!!!重点!!!!
        // if 分为：单分支、双分支、多分支
        // 单分支就是只写一个if
        // 双分支就是多写一个else
        // 多分支就是写好几个else   

        // 括号内的条件为true时，进入大括号里执行代码
        // 小括号内的结果若不是布尔类型时，会发生隐式转换转为布尔类型


        // 多分枝不能打乱顺序,满足第一个if就不会执行后边的代码
        let zxc = prompt('想来网吧,先输入你的年龄:')
        // if ( 判断条件 ) 为true才会执行
        if (zxc >= 18) {
            // 执行的属性
            alert('电子海洛因,吸到手抽筋');

        } else if (zxc < 18 && zxc > 6) {//当前面的if没有执行,就会顺位到此再进行判断,为true就可执行本段代码,也可不写条件直接执行
            alert('滚,回家做作业去');
        } else {
            alert('给爷爬回家吃奶去')
        }





        // switch语句
        // if和switch的内容都可以互相做到,但是if要简洁好用很多
        let goods = prompt('请输入您想搜索的产品')
        switch (goods) {
            // 找到跟小括号里数据全等的case值，并执行里面对应的代码
            case '手机':
                alert('小米 苹果 华为 三星')
                // break表示一个case到此结束
                break
            // 数据若跟'电脑'全等，则执行代码2
            case '电脑':
                alert('外星人 玩家国度 宏碁')
                break
        }



        // switch 穿透效果
        // 穿透效果 就是不写break,可以节省代码量
        let num = +prompt('请输入查询的月份')
        switch (num) {
            case 3:
            case 4:
            case 5:
                alert('春天')
                break
            case 6:
            case 7:
            case 8:
                alert('夏天')
                break
            case 9:
            case 10:
            case 11:
                alert('秋天')
                break
            case 12:
            case 1:
            case 2:
                alert('冬天')
                break
        }


        // 三元表达式
        // 仅限于 真假都是只有一种情况可以使用
        let year = prompt('大爷来玩啊')
        // ?后跟着 true 的执行代码 
        // :后跟着 false 的执行代码
        year >= 18 ? alert('这是飞一样的感觉') : alert('腿给你打断')
        let years = confirm('大爷来玩啊')
        years ? alert('这是飞一样的感觉') : alert('腿给你打断')
    </script>
</body>

</html>